function person (a, b, c) {
  console.log(this.name);
  console.log(a, b, c);
}

person.prototype.collection = 'Collection';
var student = {name: 'Xmo'};

Function.prototype.newBind = function ( obj ) {
  if (typeof this !== 'function') {
    throw new TypeError ('Error');
  }

  var _this = this,
      // 取出参数 
      arr = Array.prototype.slice.call(arguments, 1),
      o = function () {}
      newf = function() {
        // 这个时候的arguments是指bind返回的函数传入的参数
        var arr2 = Array.prototype.slice.call( arguments ),
            arrSum = arr.concat(arr2);
        // 判断是否是 new 创建的对象
        if (this instanceof o) {
          _this.apply(this, arrSum);
        }
        else {
          _this.apply(obj, arrSum)
        }
      };
  o.prototype = _this.prototype;
  newf.prototype = new o;
  return newf;
};

person.newBind(student);